What is @thi.ng/random?
@thi.ng/random is a versatile library for generating random numbers and sequences. It provides various random number generators (RNGs) and utilities for creating random values, sequences, and distributions.
What are @thi.ng/random's main functionalities?
Basic Random Number Generation
This feature allows you to generate basic random numbers, both floating-point and integer values, using the default system RNG.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
console.log(rng.float()); // Generates a random float between 0 and 1
console.log(rng.int()); // Generates a random integer
Seeded Random Number Generation
This feature allows you to create a seeded random number generator, which produces reproducible sequences of random numbers.
const { XsAdd } = require('@thi.ng/random');
const rng = new XsAdd(12345); // Seeded RNG
console.log(rng.float()); // Generates a reproducible random float
console.log(rng.int()); // Generates a reproducible random integer
Random Value Generation from Arrays
This feature allows you to randomly select values from an array, which is useful for shuffling or sampling data.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
const arr = [1, 2, 3, 4, 5];
console.log(rng.choice(arr)); // Randomly selects an element from the array
Random Distributions
This feature allows you to generate random numbers from various statistical distributions, such as normal (Gaussian) distributions.
const { SYSTEM } = require('@thi.ng/random');
const rng = SYSTEM;
console.log(rng.norm(0, 1)); // Generates a random number from a normal distribution with mean 0 and standard deviation 1
Other packages similar to @thi.ng/random
random-js
random-js is a library for generating random numbers and values. It provides a variety of RNGs and utilities for creating random values, similar to @thi.ng/random. However, random-js focuses more on providing a simple API for common randomization tasks.
seedrandom
seedrandom is a library for seeded random number generation. It allows you to create reproducible random sequences by providing a seed. While it offers fewer utilities compared to @thi.ng/random, it is highly focused on the quality and reproducibility of random numbers.
chance
chance is a library for generating random data for various purposes, including numbers, strings, and even entire objects. It offers a broader range of random data generation compared to @thi.ng/random, which is more focused on numerical randomization.


[!NOTE]
This is one of 202 standalone projects, maintained as part
of the @thi.ng/umbrella monorepo
and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me on
GitHub. Thank you! ❤️
About
Pseudo-random number generators w/ unified API, distributions, weighted choices, ID generation.
[!IMPORTANT]
In July 2024 this package was restructured and split-up to extract some
features into smaller more focused packages:
This package provides the IRandom
interface and various (mostly seedable)
pseudo-random number generator implementations, incl. IRandom
wrappers for
Math.random()
(or other external PRNGs) and window.crypto
:
Partially ported from C implementations taken from c.thi.ng.
Random distributions
Other utilities
Status
STABLE - used in production
Search or submit any issues for this package
Support packages
Related packages
- @thi.ng/ksuid - Configurable K-sortable unique IDs, ULIDs, binary & base-N encoded, 32/48/64bit time resolutions
Installation
yarn add @thi.ng/random
ESM import:
import * as rnd from "@thi.ng/random";
Browser ESM import:
<script type="module" src="https://esm.run/@thi.ng/random"></script>
JSDelivr documentation
For Node.js REPL:
const rnd = await import("@thi.ng/random");
Package sizes (brotli'd, pre-treeshake): ESM: 1.93 KB
Dependencies
Note: @thi.ng/api is in most cases a type-only import (not used at runtime)
Usage examples
19 projects in this repo's
/examples
directory are using this package:
Screenshot | Description | Live demo | Source |
---|
 | Self-modifying, animated typographic grid with emergent complex patterns | Demo | Source |
 | Probabilistic color theme generator | Demo | Source |
 | Interactive inverse FFT toy synth | Demo | Source |
 | 2D Bezier curve-guided particle system | Demo | Source |
 | Basic hiccup-based canvas drawing | Demo | Source |
 | Barnsley fern IFS fractal renderer | Demo | Source |
 | k-means clustering visualization | Demo | Source |
 | Randomized space-filling, nested grid layout generator | Demo | Source |
 | Randomized 4-point 2D color gradient image generator | Demo | Source |
 | Interactive pixel sorting tool using thi.ng/color & thi.ng/pixel | Demo | Source |
 | Animated, iterative polygon subdivisions & visualization | Demo | Source |
 | Procedural stochastic text generation via custom DSL, parse grammar & AST transformation | Demo | Source |
 | Basic usage of thi.ng/rdom keyed list component wrapper | Demo | Source |
 | Generative audio synth offline renderer and WAV file export | Demo | Source |
 | Evolutionary shader generation using genetic programming | Demo | Source |
 | Responsive & reactively computed stacked column layout | Demo | Source |
 | thi.ng/rdom & thi.ng/rstream based quiz to guess thi.ng package names | Demo | Source |
 | Animated t-SNE visualization of 4D data | Demo | Source |
 | Game of Life implemented as WebGL2 multi-pass shader pipeline | Demo | Source |
API
Generated API docs
import { Smush32 } from "@thi.ng/random";
const rnd = new Smush32(0xdecafbad);
rnd.int()
rnd.float()
rnd.norm(100)
rnd.minmax(10, 20)
rnd.minmaxInt(10, 20)
Authors
If this project contributes to an academic publication, please cite it as:
@misc{thing-random,
title = "@thi.ng/random",
author = "Karsten Schmidt",
note = "https://thi.ng/random",
year = 2015
}
License
© 2015 - 2025 Karsten Schmidt // Apache License 2.0